Linux多线程下载

Linux多线程下载

有时候我们在下载一个较大的东西上传服务器的时候,有一种操作是先使用本地电脑下载,然后上传到服务器,或者直接使用服务器上的wget进行安装,但是使用本地下载然后上传的话,如果受到本地网络或者服务器的限制,要么可能下载速度慢或者上传速度慢,而且可能会出现等待时间过长的情况,那如果我们使用linux服务器上比较常见见的下载工具curl和wget,但是两者都不支持多线程, 断点续传的作用不见得能发挥到最大。给大家介绍两款linux中多线程下载工具axelaria2c,开启多线程疯狂下载。

我们先来介绍下axel

axel

我们这边以Centos7系统为例,其他系统类似,只要使用对应的安装命令安装正确的包,就可以使用了。

CentOS 7安装Axel:

目前yum官方源上没有Axel,我们无法通过yum直接进行安装,但是我们可以通过安装epel第三方源然后后yum安装axel下载工具。

1
yum install axel

大家也可以选择使用以下网址将rpm包下载后将包包上传,然后进行手动安装。

1
https://pkgs.org/download/axel

然后使用

1
2
3
rpm -ivh 包名字(本地包位置以及名字)
或者
rpm -Uvh 包连接(远程rpm包,命令会自动下载后安装)

CentOS 6安装Axel:

32位CentOS 6执行下面命令:

1
2
wget -c http://mirrors.sohu.com/dag/redhat/el6/en/i386/rpmforge/RPMS/axel-2.4-1.el6.rf.i686.rpm
rpm -ivh axel-2.4-1.el6.rf.i686.rpm

64位CentOS 6执行下面命令:

1
2
wget -c http://mirrors.sohu.com/dag/redhat/el6/en/x86_64/rpmforge/RPMS/axel-2.4-1.el6.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el6.rf.x86_64.rpm

Debian/Ubuntu安装Axel:

1
apt-get install axel

Fedora安装Axel

1
dnf install axel

使用

简略使用.”-n”线程数、”-o”下载保存目录、”-a”简略下载条。我们以下载一个GITHUB上的Odoo为例,这个包大概149MB,我正常下载速度在30k左右。

image-20210915133508036

用axel开10个下载:

image-20210915142502988

image-20210915142728672

本想使用相同的下载,但是由于我系统安装的axel过低,下载Https的时候一直出现以下情况:

image-20210915142803607

我看了下资料好像是我安装的axel版本较低,我尝试安装更高版本的,但是由于都是第三方包,且包对不上版本,所以我就拿另一个作为比对,我们可以看到,单个线程下载的速度可以到达3万Kb左右。而且如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。

参数

1
2
3
4
5
6
7
8
9
10
11
12
--max-speed=x , -s x 最高速度x 
--num-connections=x , -n x 连接数x
--output=f , -o f 下载为本地文件f
--search[=x] , -S [x] 搜索镜像
--header=x , -H x 添加头文件字符串x(指定 HTTP header)
--user-agent=x , -U x 设置用户代理(指定 HTTP user agent)
--no-proxy , -N 不使用代理服务器
--quiet , -q 静默模式
--verbose ,-v 更多状态信息
--alternate , -a Alternate progress indicator
--help ,-h 帮助
--version ,-V 版本信息

aria2c

aria2就更强大了,他提供了Windows、Mac和Linux三个版本的,在Windows上实现多线程下载。使用命令./aria2c –v,查看Enabled Feature。如下图所示,支持BT,GZip, HTTPS, Medssage Digest下载。aria2是一个轻量级的多协议多源命令行下载实用程序。可以通过内置的JSON-RPC和XML-RPC接口操作aria2。重点圈出来HTTPS,是因为我想下载的一些文件是基于HTTPS。

image-20210915143730187

下载

https://github.com/aria2/aria2/releases
根据平台选择相应的版本就可以了

下载相关配置

进入 mkdir ~/.aria2

最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=5

同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=15

最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M

单个任务最大线程数, 添加时可指定, 默认:5
split=5

整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0

单个任务下载速度限制, 默认:0
#max-download-limit=0

整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=20kb

单个任务上传速度限制, 默认:0
max-upload-limit=5kb

禁用IPv6, 默认:false
disable-ipv6=true

禁用https证书检查
check-certificate=false
#运行覆盖已存在文件
allow-overwrite=true
#自动重命名
auto-file-renaming

进度保存相关
从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session

在Aria2退出时保存错误/未完成的下载任务到会话文件
save-session=/etc/aria2/aria2.session

定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=30

RPC相关设置
启用RPC, 默认:false
enable-rpc=true

允许所有来源, 默认:false
rpc-allow-origin-all=true

允许非外部访问, 默认:false
rpc-listen-all=true

事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select

RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800

保存上传的种子文件
rpc-save-upload-metadata=false

BT/PT下载相关
当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true

BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413

单个种子最大连接数, 默认:55
#bt-max-peers=55

打开DHT功能, PT需要禁用, 默认:true
enable-dht=true

打开IPv6 DHT功能, PT需要禁用
enable-dht6=false

DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999

本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true

种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true

每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K

客户端伪装, PT需要
peer-id-prefix=-UT341-
user-agent=uTorrent/341(109279400)(30888)

当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=1.0

强制保存会话, 话即使任务已经完成, 默认:false
较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false

BT校验相关, 默认:true
#bt-hash-check-seed=true

继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true

保存磁力链接元数据为种子文件(.torrent文件), 默认:false
#bt-save-metadata=false
#仅下载种子文件
bt-metadata-only=true
#通过网上的种子文件下载,种子保存在内存
follow-torrent=mem

使用方法

一般下载

使用aria2 下载文件,只需在命令后附加地址即可如:

aria2c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

分段下载

利用 aria2的分段下载功能可以加快文件的下载速度,对于下载大文件时特别有用。为了使用aria2的分段下载功能,你需要在命令中指定s选项

aria2c -s 2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

这将使用2个连接来下载该文件。s后面的参数值介于1~5之间,你可以根据实际情况选择。

断点续传

在命令中使用c选项可以断点续传文件。

aria2c -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2

下载 torrent 文件

你也可以使用 aria2 下载BitTorrent文件如:

aria2c -0 gutsy.torrent http://cdimage.ubuntu.com/daily-live/current/gutsy-desktop-i386.iso.torrent

文件读取连接下载

从 files.txt 中获取下载链接进行下载, files.txt 中可以包含多个链接如:

aria2c -i files.txt